<?php

class NotaCreditoEspecialesController extends AppController {

    var $name = 'NotaCreditoEspeciales';
    var $uses = array('NotaCredito', 'NotaCreditoEspecial', 'NotaCreditoCentral', 'Cliente', 'Usuario');
    var $helpers = array('Formulario', 'Interfaz', 'AjaxAG');
    var $components = array('Interfaz', 'Maestro');
    var $layout = "ajax";
    var $paginate = array('limit' => 10, 'order' => array('NotaCreditoEspecial.id' => 'DESC'));

    public function beforeFilter() {
        $this->validar_sesion();
    }
    
    public function afterFilter() {
        $this->auditoria();
    }
    
    public function index($busqueda = null) {
        extract($this->request->data);
        $data = null;
        $idCliente = null;
        $condiciones = array();
        $condicionesModelo = array();
        $condicionesCliente = array();
        $condiciones['NotaCreditoEspecial.estatus'] = array(1, 2);
        if(!empty($fechaInicio))
            $condiciones['DATE(NotaCreditoEspecial.creado) BETWEEN ? AND ?'] = array($fechaInicio, $fechaFin);
        
        if(!empty($busqueda)){
            $condicionesModelo['NotaCreditoEspecial.numero ILIKE'] = "%$busqueda%";
            $idCliente = $this->Cliente->buscar_clientes($busqueda);
            if (!empty($idCliente))
                $condicionesCliente['NotaCreditoEspecial.cliente_id'] = $idCliente;
        } else {
            if(!empty($punto_id))
                $condiciones['NotaCreditoEspecial.punto_id'] = $punto_id;
        }
        
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objNotCreEsp = $this->Maestro->modelo('punto', 'NotaCreditoEspecial', $tiendaSesion);
        $data = $this->paginate($objNotCreEsp, array($condiciones, 'OR' => array($condicionesModelo, $condicionesCliente)));
        $this->set('url', $busqueda);
        $this->set('data', $data);
    }
    
    public function logs() {
        extract($this->request->data);
        $idNcre = $this->Interfaz->id($idNcre);
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objNcre = $this->Maestro->modelo('punto', 'NotaCreditoEspecial', $tiendaSesion);
        $logNotaCreditoEsp = $objNcre->query("SELECT * FROM fnc_log_documento($idNcre,'NCR') AS (id integer,documento character varying,fecha timestamp without time zone,tipo integer,descripcion character varying);"
        );

        $this->set('log', $logNotaCreditoEsp);
    }

    public function historial() {
        $data = null;
        $condiciones['DATE(NotaCreditoEspecial.creado)'] = date('Y-m-d');
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objNotCreEsp = $this->Maestro->modelo('punto', 'NotaCreditoEspecial', $tiendaSesion);
        $data = $this->paginate($objNotCreEsp, array($condiciones));

        $this->set('data', $data);
    }

    public function detalle() {
        extract($this->request->data);
        $id = $this->Interfaz->id($id);
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objNotCreEsp = $this->Maestro->modelo('punto', 'NotaCreditoEspecial', $tiendaSesion);
        $data = $objNotCreEsp->find('first', array('conditions' => array('NotaCreditoEspecial.id' => $id)));
        $datosUsuario = $this->Usuario->find('first', array('fields' => 'Usuario.usuario', 'conditions' => array('Usuario.id' => $data['NotaCreditoEspecial']['usuario_id'])));

        $this->set('usuario', $datosUsuario['Usuario']['usuario']);
        $this->set('url', $id);
        $this->set('data', $data);
    }
    
    public function aprobar() {
        extract($this->request->data);
        $id = $this->Interfaz->id($id);
        $dataNCE = $dataNC = $dataNCC = array();
        $error = true;
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objNotCre = $this->Maestro->modelo('punto', 'NotaCredito', $tiendaSesion);
        $objNotCreEsp = $this->Maestro->modelo('punto', 'NotaCreditoEspecial', $tiendaSesion);
        $infoNCE = $objNotCreEsp->find('first', array('conditions' => array('NotaCreditoEspecial.id' => $id)));

        $dataNC['usuario_id'] = $this->Interfaz->id($this->Session->read('usuario_id'));
        $dataNC['cliente_id'] = $infoNCE['NotaCreditoEspecial']['cliente_id'];
        $dataNC['tienda_id'] = $this->Interfaz->id($this->Session->read('tienda_id_trabajo'));
        $dataNC['numero'] = '001';
        $dataNC['nombre'] = 'ESPECIAL';
        $dataNC['fecha'] = $infoNCE['NotaCreditoEspecial']['fecha'];
        $dataNC['monto'] = $infoNCE['NotaCreditoEspecial']['monto'];
        $dataNC['doc_referencia'] = $infoNCE['NotaCreditoEspecial']['numero'];
        $dataNC['id_referencia'] = $infoNCE['NotaCreditoEspecial']['id'];
        $dataNC['observacion'] = "NOTA DE CREDITO GENERADA POR NOTA DE CREDITO ESPECIAL BAJO DOCUMENTO NRO {$infoNCE['NotaCreditoEspecial']['numero']}";
        $dataNC['punto_id'] = $this->Session->read('punto_id');

        $dataNCE['id'] = $id;
        $dataNCE['estatus'] = 1;
        $dataNCE['modificado'] = 'now()';
        
        $dataNCC['id'] = $infoNCE['NotaCreditoEspecial']['id_maestro'];
        $dataNCC['estatus'] = 1;
        $dataNCC['modificado'] = 'now()';
        
        $objNotCreEsp->query('BEGIN WORK');
        if ($objNotCreEsp->save($dataNCE)) {
            if ($objNotCre->save($dataNC)) {
                if ($this->NotaCreditoCentral->save($dataNCC)) {
                    $tienda = substr($this->Session->read('codigo_punto'), 1);
                    $res = $objNotCre->query("select fn_numero_credito('$tienda', {$objNotCre->id}, {$this->Session->read('punto_id')}) as res");
                    $resultado = $res[0][0]['res'];
                    if($resultado) {
                        $error = false;
                        $objNotCreEsp->query('COMMIT');
                        echo "1_";
                    }
                }
            }
        }
        
        if($error) {
            $objNotCreEsp->query('ROLLBACK');
            echo "2_";
        }

        $this->autoRender = false;
    }
}